import dayjs from 'dayjs' import { ArrowRight, ExternalLinkIcon, RefreshCw } from 'lucide-react' import Link from 'next/link' import { NetworkTrafficRenderer, ResponseSpeedChartRenderer, TopApiRoutesRenderer, TotalRequestsChartRenderer, } from '@/components/interfaces/Reports/renderers/ApiRenderers' import { CacheHitRateChartRenderer, TopCacheMissesRenderer, } from '@/components/interfaces/Reports/renderers/StorageRenderers' import ReportFilterBar from '@/components/interfaces/Reports/ReportFilterBar' import ReportHeader from '@/components/interfaces/Reports/ReportHeader' import ReportPadding from '@/components/interfaces/Reports/ReportPadding' import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' import ReportWidget from '@/components/interfaces/Reports/ReportWidget' import { DatePickerValue, LogsDatePicker, } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' import DefaultLayout from '@/components/layouts/DefaultLayout' import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { ObservabilityLink } from '@/components/ui/ObservabilityLink' import { useStorageReport } from '@/data/reports/storage-report-query' import { useRefreshHandler, useReportDateRange } from '@/hooks/misc/useReportDateRange' import { DOCS_URL } from '@/lib/constants' import type { NextPageWithLayout } from '@/types' export const StorageReport: NextPageWithLayout = () => { const report = useStorageReport() const { data, error, filters, isLoading, params, mergeParams, removeFilters, addFilter, refresh, } = report const { datePickerHelpers, datePickerValue, handleDatePickerChange: handleDatePickerChangeFromHook, showUpgradePrompt, setShowUpgradePrompt, selectedDateRange, } = useReportDateRange(REPORT_DATERANGE_HELPER_LABELS.LAST_60_MINUTES) const handleDatepickerChange = (vals: DatePickerValue) => { const promptShown = handleDatePickerChangeFromHook(vals) if (!promptShown) { mergeParams({ iso_timestamp_start: vals.from ?? '', iso_timestamp_end: vals.to ?? '', }) } } const onRefreshReport = useRefreshHandler( datePickerValue, datePickerHelpers, handleDatepickerChange, refresh ) return (
} className="w-7" tooltip={{ content: { side: 'bottom', text: 'Refresh report' } }} onClick={onRefreshReport} /> {selectedDateRange && (

{dayjs(selectedDateRange.period_start.date).format('MMM D, h:mma')}

{dayjs(selectedDateRange.period_end.date).format('MMM D, h:mma')}

)}
} >
The number of storage requests that are cached at the edge level. A higher number of hits is better.{' '} Read More
} data={data.cacheHitRate || []} renderer={CacheHitRateChartRenderer} append={TopCacheMissesRenderer} appendProps={{ data: data.topCacheMisses || [] }} />
) } StorageReport.getLayout = (page) => ( {page} ) export default StorageReport